// 老师讲完练习代码

// 泛型
function foo(msg:number|string):number|string{ 
    return  msg //msg可以是数字类型，也可以是字符串类型
}
foo('1909b')

// 可以简写为
// 泛型的定义
// 一个参数
function foo1<T>(msg:T):T{
    return  msg //下面传的是什么类型，T就代表什么类型
}
foo1('1909b')  //foo1后面可以不写类型，当参数是什么类型时，T可以推倒出什么类型

// 多个参数
function foo2<T,U>(gread:T,num:U){
    console.log(gread);
    console.log(num);
}
foo2('1909b',36) //当传递两个参数时，T和U会根据参数推倒出相对应的类型

// 交换数组元素
function foo3<T,U>(arr:[T,U]):[U,T]{
    return  [arr[1],arr[0]]  //T,U根据传递的参数能推倒出相对应的类型，但在返回时，会交换位置，就会变成相反的类型
}
foo3([23,'lxf'])  //打印出来的结果是['lxf',23]